package com.example.imagethumbnail.service;

import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

@Service
public class ThumbnailAwtService {
    public static final int WIDTH = 100;
    public static final int HEIGHT = 100;

    public String thumbnail(MultipartFile file, String uploadPath, String realUploadPath){
        OutputStream os = null;

        try {
            String des = realUploadPath + File.separator +"thum_"+file.getOriginalFilename();
//            Thumbnails.of(file.getInputStream()).size(WIDTH,HEIGHT).toFile(des);
            os = new FileOutputStream(des);

            Image image = ImageIO.read(file.getInputStream());
            int width = image.getWidth(null); //原图宽度
            int height = image.getHeight(null); //原图高度

            int rate1 = width/WIDTH; //宽度缩略比例；
            int rate2 = height/HEIGHT; //高度缩略比例；

            int rate = 1;
            rate = Math.max(rate1,rate2);

            //计算缩略图的最终宽度和高度
            int newWidth = width/rate;
            int newHeight = height/rate;

            //生成图片
            BufferedImage bufferedImage = new BufferedImage(newWidth,newHeight,BufferedImage.TYPE_INT_RGB);

            bufferedImage.getGraphics().drawImage(
                    image.getScaledInstance(newWidth,newHeight,image.SCALE_SMOOTH)
                    ,0,0,null);

            //image/jpeg
            String imageType = file.getContentType().substring(file.getContentType().indexOf("/")+1);
            ImageIO.write(bufferedImage,imageType,os);


        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(os!=null){
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
        return  uploadPath + File.separator +"thum_"+file.getOriginalFilename();

    }

}
